<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8"/>
    <title>Test Report</title>
    <style>body {
  font-family: Helvetica, Arial, sans-serif;
  font-size: 12px;
  /* do not increase min-width as some may use split screens */
  min-width: 800px;
  color: #999;
}

h1 {
  font-size: 24px;
  color: black;
}

h2 {
  font-size: 16px;
  color: black;
}

p {
  color: black;
}

a {
  color: #999;
}

table {
  border-collapse: collapse;
}

/******************************
 * SUMMARY INFORMATION
 ******************************/
#environment td {
  padding: 5px;
  border: 1px solid #E6E6E6;
}
#environment tr:nth-child(odd) {
  background-color: #f6f6f6;
}

/******************************
 * TEST RESULT COLORS
 ******************************/
span.passed,
.passed .col-result {
  color: green;
}

span.skipped,
span.xfailed,
span.rerun,
.skipped .col-result,
.xfailed .col-result,
.rerun .col-result {
  color: orange;
}

span.error,
span.failed,
span.xpassed,
.error .col-result,
.failed .col-result,
.xpassed .col-result {
  color: red;
}

/******************************
 * RESULTS TABLE
 *
 * 1. Table Layout
 * 2. Extra
 * 3. Sorting items
 *
 ******************************/
/*------------------
 * 1. Table Layout
 *------------------*/
#results-table {
  border: 1px solid #e6e6e6;
  color: #999;
  font-size: 12px;
  width: 100%;
}
#results-table th,
#results-table td {
  padding: 5px;
  border: 1px solid #E6E6E6;
  text-align: left;
}
#results-table th {
  font-weight: bold;
}

/*------------------
 * 2. Extra
 *------------------*/
.log {
  background-color: #e6e6e6;
  border: 1px solid #e6e6e6;
  color: black;
  display: block;
  font-family: "Courier New", Courier, monospace;
  height: 230px;
  overflow-y: scroll;
  padding: 5px;
  white-space: pre-wrap;
}
.log:only-child {
  height: inherit;
}

div.image {
  border: 1px solid #e6e6e6;
  float: right;
  height: 240px;
  margin-left: 5px;
  overflow: hidden;
  width: 320px;
}
div.image img {
  width: 320px;
}

div.video {
  border: 1px solid #e6e6e6;
  float: right;
  height: 240px;
  margin-left: 5px;
  overflow: hidden;
  width: 320px;
}
div.video video {
  overflow: hidden;
  width: 320px;
  height: 240px;
}

.collapsed {
  display: none;
}

.expander::after {
  content: " (show details)";
  color: #BBB;
  font-style: italic;
  cursor: pointer;
}

.collapser::after {
  content: " (hide details)";
  color: #BBB;
  font-style: italic;
  cursor: pointer;
}

/*------------------
 * 3. Sorting items
 *------------------*/
.sortable {
  cursor: pointer;
}

.sort-icon {
  font-size: 0px;
  float: left;
  margin-right: 5px;
  margin-top: 5px;
  /*triangle*/
  width: 0;
  height: 0;
  border-left: 8px solid transparent;
  border-right: 8px solid transparent;
}
.inactive .sort-icon {
  /*finish triangle*/
  border-top: 8px solid #E6E6E6;
}
.asc.active .sort-icon {
  /*finish triangle*/
  border-bottom: 8px solid #999;
}
.desc.active .sort-icon {
  /*finish triangle*/
  border-top: 8px solid #999;
}
</style></head>
  <body onLoad="init()">
    <script>/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */


function toArray(iter) {
    if (iter === null) {
        return null;
    }
    return Array.prototype.slice.call(iter);
}

function find(selector, elem) { // eslint-disable-line no-redeclare
    if (!elem) {
        elem = document;
    }
    return elem.querySelector(selector);
}

function findAll(selector, elem) {
    if (!elem) {
        elem = document;
    }
    return toArray(elem.querySelectorAll(selector));
}

function sortColumn(elem) {
    toggleSortStates(elem);
    const colIndex = toArray(elem.parentNode.childNodes).indexOf(elem);
    let key;
    if (elem.classList.contains('result')) {
        key = keyResult;
    } else if (elem.classList.contains('links')) {
        key = keyLink;
    } else {
        key = keyAlpha;
    }
    sortTable(elem, key(colIndex));
}

function showAllExtras() { // eslint-disable-line no-unused-vars
    findAll('.col-result').forEach(showExtras);
}

function hideAllExtras() { // eslint-disable-line no-unused-vars
    findAll('.col-result').forEach(hideExtras);
}

function showExtras(colresultElem) {
    const extras = colresultElem.parentNode.nextElementSibling;
    const expandcollapse = colresultElem.firstElementChild;
    extras.classList.remove('collapsed');
    expandcollapse.classList.remove('expander');
    expandcollapse.classList.add('collapser');
}

function hideExtras(colresultElem) {
    const extras = colresultElem.parentNode.nextElementSibling;
    const expandcollapse = colresultElem.firstElementChild;
    extras.classList.add('collapsed');
    expandcollapse.classList.remove('collapser');
    expandcollapse.classList.add('expander');
}

function showFilters() {
    const filterItems = document.getElementsByClassName('filter');
    for (let i = 0; i < filterItems.length; i++)
        filterItems[i].hidden = false;
}

function addCollapse() {
    // Add links for show/hide all
    const resulttable = find('table#results-table');
    const showhideall = document.createElement('p');
    showhideall.innerHTML = '<a href="javascript:showAllExtras()">Show all details</a> / ' +
                            '<a href="javascript:hideAllExtras()">Hide all details</a>';
    resulttable.parentElement.insertBefore(showhideall, resulttable);

    // Add show/hide link to each result
    findAll('.col-result').forEach(function(elem) {
        const collapsed = getQueryParameter('collapsed') || 'Passed';
        const extras = elem.parentNode.nextElementSibling;
        const expandcollapse = document.createElement('span');
        if (extras.classList.contains('collapsed')) {
            expandcollapse.classList.add('expander');
        } else if (collapsed.includes(elem.innerHTML)) {
            extras.classList.add('collapsed');
            expandcollapse.classList.add('expander');
        } else {
            expandcollapse.classList.add('collapser');
        }
        elem.appendChild(expandcollapse);

        elem.addEventListener('click', function(event) {
            if (event.currentTarget.parentNode.nextElementSibling.classList.contains('collapsed')) {
                showExtras(event.currentTarget);
            } else {
                hideExtras(event.currentTarget);
            }
        });
    });
}

function getQueryParameter(name) {
    const match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
    return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
}

function init () { // eslint-disable-line no-unused-vars
    resetSortHeaders();

    addCollapse();

    showFilters();

    sortColumn(find('.initial-sort'));

    findAll('.sortable').forEach(function(elem) {
        elem.addEventListener('click',
            function() {
                sortColumn(elem);
            }, false);
    });
}

function sortTable(clicked, keyFunc) {
    const rows = findAll('.results-table-row');
    const reversed = !clicked.classList.contains('asc');
    const sortedRows = sort(rows, keyFunc, reversed);
    /* Whole table is removed here because browsers acts much slower
     * when appending existing elements.
     */
    const thead = document.getElementById('results-table-head');
    document.getElementById('results-table').remove();
    const parent = document.createElement('table');
    parent.id = 'results-table';
    parent.appendChild(thead);
    sortedRows.forEach(function(elem) {
        parent.appendChild(elem);
    });
    document.getElementsByTagName('BODY')[0].appendChild(parent);
}

function sort(items, keyFunc, reversed) {
    const sortArray = items.map(function(item, i) {
        return [keyFunc(item), i];
    });

    sortArray.sort(function(a, b) {
        const keyA = a[0];
        const keyB = b[0];

        if (keyA == keyB) return 0;

        if (reversed) {
            return keyA < keyB ? 1 : -1;
        } else {
            return keyA > keyB ? 1 : -1;
        }
    });

    return sortArray.map(function(item) {
        const index = item[1];
        return items[index];
    });
}

function keyAlpha(colIndex) {
    return function(elem) {
        return elem.childNodes[1].childNodes[colIndex].firstChild.data.toLowerCase();
    };
}

function keyLink(colIndex) {
    return function(elem) {
        const dataCell = elem.childNodes[1].childNodes[colIndex].firstChild;
        return dataCell == null ? '' : dataCell.innerText.toLowerCase();
    };
}

function keyResult(colIndex) {
    return function(elem) {
        const strings = ['Error', 'Failed', 'Rerun', 'XFailed', 'XPassed',
            'Skipped', 'Passed'];
        return strings.indexOf(elem.childNodes[1].childNodes[colIndex].firstChild.data);
    };
}

function resetSortHeaders() {
    findAll('.sort-icon').forEach(function(elem) {
        elem.parentNode.removeChild(elem);
    });
    findAll('.sortable').forEach(function(elem) {
        const icon = document.createElement('div');
        icon.className = 'sort-icon';
        icon.textContent = 'vvv';
        elem.insertBefore(icon, elem.firstChild);
        elem.classList.remove('desc', 'active');
        elem.classList.add('asc', 'inactive');
    });
}

function toggleSortStates(elem) {
    //if active, toggle between asc and desc
    if (elem.classList.contains('active')) {
        elem.classList.toggle('asc');
        elem.classList.toggle('desc');
    }

    //if inactive, reset all other functions and add ascending active
    if (elem.classList.contains('inactive')) {
        resetSortHeaders();
        elem.classList.remove('inactive');
        elem.classList.add('active');
    }
}

function isAllRowsHidden(value) {
    return value.hidden == false;
}

function filterTable(elem) { // eslint-disable-line no-unused-vars
    const outcomeAtt = 'data-test-result';
    const outcome = elem.getAttribute(outcomeAtt);
    const classOutcome = outcome + ' results-table-row';
    const outcomeRows = document.getElementsByClassName(classOutcome);

    for(let i = 0; i < outcomeRows.length; i++){
        outcomeRows[i].hidden = !elem.checked;
    }

    const rows = findAll('.results-table-row').filter(isAllRowsHidden);
    const allRowsHidden = rows.length == 0 ? true : false;
    const notFoundMessage = document.getElementById('not-found-message');
    notFoundMessage.hidden = !allRowsHidden;
}
</script>
    <h1>report.html</h1>
    <p>Report generated on 12-Nov-2022 at 17:45:15 by <a href="https://pypi.python.org/pypi/pytest-html">pytest-html</a> v3.1.1</p>
    <h2>Environment</h2>
    <table id="environment">
      <tr>
        <td>JAVA_HOME</td>
        <td>D:\Program Files\Java\jdk1.8.0_73</td></tr>
      <tr>
        <td>Packages</td>
        <td>{"pluggy": "1.0.0", "py": "1.11.0", "pytest": "7.0.1"}</td></tr>
      <tr>
        <td>Platform</td>
        <td>Windows-10-10.0.19041-SP0</td></tr>
      <tr>
        <td>Plugins</td>
        <td>{"html": "3.1.1", "metadata": "1.11.0"}</td></tr>
      <tr>
        <td>Python</td>
        <td>3.6.4</td></tr></table>
    <h2>Summary</h2>
    <p>30 tests ran in 9.20 seconds. </p>
    <p class="filter" hidden="true">(Un)check the boxes to filter the results.</p><input checked="true" class="filter" data-test-result="passed" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="passed">28 passed</span>, <input checked="true" class="filter" data-test-result="skipped" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="skipped">1 skipped</span>, <input checked="true" class="filter" data-test-result="failed" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="failed">2 failed</span>, <input checked="true" class="filter" data-test-result="error" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="error">0 errors</span>, <input checked="true" class="filter" data-test-result="xfailed" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="xfailed">0 expected failures</span>, <input checked="true" class="filter" data-test-result="xpassed" disabled="true" hidden="true" name="filter_checkbox" onChange="filterTable(this)" type="checkbox"/><span class="xpassed">0 unexpected passes</span>
    <h2>Results</h2>
    <table id="results-table">
      <thead id="results-table-head">
        <tr>
          <th class="sortable result initial-sort" col="result">Result</th>
          <th class="sortable" col="name">Test</th>
          <th class="sortable" col="duration">Duration</th>
          <th class="sortable links" col="links">Links</th></tr>
        <tr hidden="true" id="not-found-message">
          <th colspan="4">No results found. Try to check the filters</th></tr></thead>
      <tbody class="failed results-table-row">
        <tr>
          <td class="col-result">Failed</td>
          <td class="col-name">scripts/test01_reg_login.py::TestRegLogin::test03_register[form_dict7-100-密码不能为空]</td>
          <td class="col-duration">0.25</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log">self = &lt;scripts.test01_reg_login.TestRegLogin object at 0x00000256DBB307B8&gt;<br/>form_dict = {&#x27;dy_server&#x27;: &#x27;on&#x27;, &#x27;password&#x27;: &#x27;&#x27;, &#x27;phone&#x27;: &#x27;18743264328&#x27;, &#x27;phone_code&#x27;: &#x27;666666&#x27;, ...}, exp_status = 100, exp_desc = &#x27;密码不能为空&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;form_dict,exp_status,exp_desc&quot;, read_json(&quot;reg_login_data&quot;,&quot;user_register&quot;))<br/>    # 注册测试用例<br/>    def test03_register(self,form_dict,exp_status,exp_desc):<br/>        # 1.实现获取注册图片验证码接口<br/>        self.reg_login_api.get_img_verify_code(0.123332123123)<br/>        # 2.实现获取注册短信验证码接口<br/>        self.reg_login_api.get_phone_verify_code(form_dict.get(&quot;phone&quot;), &quot;8888&quot;)<br/>        # 3.调用封装注册接口请求的方法，获取响应数据<br/>        resp = self.reg_login_api.user_register(form_dict)<br/>        # 4.断言<br/>&gt;       common_assert(resp,exp_status,exp_desc)<br/><br/>scripts\test01_reg_login.py:48: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>resp = &lt;Response [200]&gt;, exp_status = 100, exp_desc = &#x27;密码不能为空&#x27;<br/><br/>    def common_assert(resp, exp_status, exp_desc):<br/>        # 断言-响应状态码<br/>        assert 200 == resp.status_code<br/>        # 断言-响应体数据<br/>        resp_dict = resp.json()<br/>&gt;       assert exp_status == resp_dict.get(&quot;status&quot;)<br/><span class="error">E       AssertionError</span><br/><br/>common\utils.py:12: AssertionError<br/> ------------------------------Captured stdout call------------------------------ <br/>获取注册图片验证码接口返回的响应状态码：200
获取注册短信验证码接口返回的响应体数据:{&#x27;status&#x27;: 200, &#x27;description&#x27;: &#x27;短信发送成功&#x27;}
获取注册接口返回的响应体数据:{&#x27;status&#x27;: 200, &#x27;data&#x27;: {&#x27;isLogin&#x27;: &#x27;1&#x27;}, &#x27;description&#x27;: &#x27;注册成功&#x27;}
<br/></div></td></tr></tbody>
      <tbody class="failed results-table-row">
        <tr>
          <td class="col-result">Failed</td>
          <td class="col-name">scripts/test01_reg_login.py::TestRegLogin::test03_register[form_dict8-100-我们的条款]</td>
          <td class="col-duration">0.50</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log">self = &lt;scripts.test01_reg_login.TestRegLogin object at 0x00000256DBB30828&gt;<br/>form_dict = {&#x27;dy_server&#x27;: &#x27;off&#x27;, &#x27;password&#x27;: &#x27;qqq123&#x27;, &#x27;phone&#x27;: &#x27;18743264329&#x27;, &#x27;phone_code&#x27;: &#x27;666666&#x27;, ...}, exp_status = 100, exp_desc = &#x27;我们的条款&#x27;<br/><br/>    @pytest.mark.parametrize(&quot;form_dict,exp_status,exp_desc&quot;, read_json(&quot;reg_login_data&quot;,&quot;user_register&quot;))<br/>    # 注册测试用例<br/>    def test03_register(self,form_dict,exp_status,exp_desc):<br/>        # 1.实现获取注册图片验证码接口<br/>        self.reg_login_api.get_img_verify_code(0.123332123123)<br/>        # 2.实现获取注册短信验证码接口<br/>        self.reg_login_api.get_phone_verify_code(form_dict.get(&quot;phone&quot;), &quot;8888&quot;)<br/>        # 3.调用封装注册接口请求的方法，获取响应数据<br/>        resp = self.reg_login_api.user_register(form_dict)<br/>        # 4.断言<br/>&gt;       common_assert(resp,exp_status,exp_desc)<br/><br/>scripts\test01_reg_login.py:48: <br/>_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <br/><br/>resp = &lt;Response [200]&gt;, exp_status = 100, exp_desc = &#x27;我们的条款&#x27;<br/><br/>    def common_assert(resp, exp_status, exp_desc):<br/>        # 断言-响应状态码<br/>        assert 200 == resp.status_code<br/>        # 断言-响应体数据<br/>        resp_dict = resp.json()<br/>&gt;       assert exp_status == resp_dict.get(&quot;status&quot;)<br/><span class="error">E       AssertionError</span><br/><br/>common\utils.py:12: AssertionError<br/> ------------------------------Captured stdout call------------------------------ <br/>获取注册图片验证码接口返回的响应状态码：200
获取注册短信验证码接口返回的响应体数据:{&#x27;status&#x27;: 200, &#x27;description&#x27;: &#x27;短信发送成功&#x27;}
获取注册接口返回的响应体数据:{&#x27;status&#x27;: 200, &#x27;data&#x27;: {&#x27;isLogin&#x27;: &#x27;1&#x27;}, &#x27;description&#x27;: &#x27;注册成功&#x27;}
<br/></div></td></tr></tbody>
      <tbody class="skipped results-table-row">
        <tr>
          <td class="col-result">Skipped</td>
          <td class="col-name">scripts/test01_reg_login.py::TestRegLogin::test05_user_login_error_pwd_check</td>
          <td class="col-duration">0.00</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log">(&#x27;E:\\金融项目实战1031\\Day07\\代码\\P2P-auto-test\\scripts\\test01_reg_login.py&#x27;, 57, &#x27;Skipped: unconditional skip&#x27;)<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test01_reg_login.py::TestRegLogin::test01_img_verify_code[0.1234566-200]</td>
          <td class="col-duration">1.34</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> -----------------------------Captured stdout setup------------------------------ <br/>受影响的行数：4
受影响的行数：143
受影响的行数：4
受影响的行数：4
<br/> ------------------------------Captured stdout call------------------------------ <br/>获取注册图片验证码接口返回的响应状态码：200
<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test01_reg_login.py::TestRegLogin::test01_img_verify_code[1234566-200]</td>
          <td class="col-duration">0.11</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> ------------------------------Captured stdout call------------------------------ <br/>获取注册图片验证码接口返回的响应状态码：200
<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test01_reg_login.py::TestRegLogin::test02_phone_verify_code[15814662511-8888-200-成功]</td>
          <td class="col-duration">0.15</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> ------------------------------Captured stdout call------------------------------ <br/>获取注册图片验证码接口返回的响应状态码：200
获取注册短信验证码接口返回的响应体数据:{&#x27;status&#x27;: 200, &#x27;description&#x27;: &#x27;短信发送成功&#x27;}
<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test01_reg_login.py::TestRegLogin::test02_phone_verify_code[15814662512-8887-100-错误]</td>
          <td class="col-duration">0.13</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> ------------------------------Captured stdout call------------------------------ <br/>获取注册图片验证码接口返回的响应状态码：200
获取注册短信验证码接口返回的响应体数据:{&#x27;status&#x27;: 100, &#x27;description&#x27;: &#x27;图片验证码错误&#x27;}
<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test01_reg_login.py::TestRegLogin::test02_phone_verify_code[15814662513--100-错误]</td>
          <td class="col-duration">0.14</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> ------------------------------Captured stdout call------------------------------ <br/>获取注册图片验证码接口返回的响应状态码：200
获取注册短信验证码接口返回的响应体数据:{&#x27;status&#x27;: 100, &#x27;description&#x27;: &#x27;图片验证码错误&#x27;}
<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test01_reg_login.py::TestRegLogin::test03_register[form_dict0-200-成功]</td>
          <td class="col-duration">0.27</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> ------------------------------Captured stdout call------------------------------ <br/>获取注册图片验证码接口返回的响应状态码：200
获取注册短信验证码接口返回的响应体数据:{&#x27;status&#x27;: 200, &#x27;description&#x27;: &#x27;短信发送成功&#x27;}
获取注册接口返回的响应体数据:{&#x27;status&#x27;: 200, &#x27;data&#x27;: {&#x27;isLogin&#x27;: &#x27;1&#x27;}, &#x27;description&#x27;: &#x27;注册成功&#x27;}
<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test01_reg_login.py::TestRegLogin::test03_register[form_dict1-200-成功]</td>
          <td class="col-duration">0.34</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> ------------------------------Captured stdout call------------------------------ <br/>获取注册图片验证码接口返回的响应状态码：200
获取注册短信验证码接口返回的响应体数据:{&#x27;status&#x27;: 200, &#x27;description&#x27;: &#x27;短信发送成功&#x27;}
获取注册接口返回的响应体数据:{&#x27;status&#x27;: 200, &#x27;data&#x27;: {&#x27;isLogin&#x27;: &#x27;1&#x27;}, &#x27;description&#x27;: &#x27;注册成功&#x27;}
<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test01_reg_login.py::TestRegLogin::test03_register[form_dict2-100-错误]</td>
          <td class="col-duration">0.38</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> ------------------------------Captured stdout call------------------------------ <br/>获取注册图片验证码接口返回的响应状态码：200
获取注册短信验证码接口返回的响应体数据:{&#x27;status&#x27;: 200, &#x27;description&#x27;: &#x27;短信发送成功&#x27;}
获取注册接口返回的响应体数据:{&#x27;status&#x27;: 100, &#x27;description&#x27;: &#x27;验证码错误!&#x27;}
<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test01_reg_login.py::TestRegLogin::test03_register[form_dict3-100-不能为空]</td>
          <td class="col-duration">0.27</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> ------------------------------Captured stdout call------------------------------ <br/>获取注册图片验证码接口返回的响应状态码：200
获取注册短信验证码接口返回的响应体数据:{&#x27;status&#x27;: 200, &#x27;description&#x27;: &#x27;短信发送成功&#x27;}
获取注册接口返回的响应体数据:{&#x27;status&#x27;: 100, &#x27;description&#x27;: &#x27;验证码不能为空!&#x27;}
<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test01_reg_login.py::TestRegLogin::test03_register[form_dict4-100-错误]</td>
          <td class="col-duration">0.21</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> ------------------------------Captured stdout call------------------------------ <br/>获取注册图片验证码接口返回的响应状态码：200
获取注册短信验证码接口返回的响应体数据:{&#x27;status&#x27;: 200, &#x27;description&#x27;: &#x27;短信发送成功&#x27;}
获取注册接口返回的响应体数据:{&#x27;status&#x27;: 100, &#x27;description&#x27;: &#x27;验证码错误&#x27;}
<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test01_reg_login.py::TestRegLogin::test03_register[form_dict5-100-不能为空]</td>
          <td class="col-duration">0.20</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> ------------------------------Captured stdout call------------------------------ <br/>获取注册图片验证码接口返回的响应状态码：200
获取注册短信验证码接口返回的响应体数据:{&#x27;status&#x27;: 200, &#x27;description&#x27;: &#x27;短信发送成功&#x27;}
获取注册接口返回的响应体数据:{&#x27;status&#x27;: 100, &#x27;description&#x27;: &#x27;短信验证码不能为空&#x27;}
<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test01_reg_login.py::TestRegLogin::test03_register[form_dict6-100-已存在]</td>
          <td class="col-duration">0.20</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> ------------------------------Captured stdout call------------------------------ <br/>获取注册图片验证码接口返回的响应状态码：200
获取注册短信验证码接口返回的响应体数据:{&#x27;status&#x27;: 200, &#x27;description&#x27;: &#x27;短信发送成功&#x27;}
获取注册接口返回的响应体数据:{&#x27;status&#x27;: 100, &#x27;description&#x27;: &#x27;手机已存在!&#x27;}
<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test01_reg_login.py::TestRegLogin::test04_user_login[18743264321-qqq123-200-成功]</td>
          <td class="col-duration">0.13</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> ------------------------------Captured stdout call------------------------------ <br/>获取登录接口返回的响应体数据:{&#x27;status&#x27;: 200, &#x27;description&#x27;: &#x27;登录成功&#x27;}
<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test01_reg_login.py::TestRegLogin::test04_user_login[-123321-100-用户名不能为空]</td>
          <td class="col-duration">0.09</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> ------------------------------Captured stdout call------------------------------ <br/>获取登录接口返回的响应体数据:{&#x27;status&#x27;: 100, &#x27;description&#x27;: &#x27;用户名不能为空&#x27;}
<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test01_reg_login.py::TestRegLogin::test04_user_login[19832123213-123321-100-用户不存在]</td>
          <td class="col-duration">0.14</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> ------------------------------Captured stdout call------------------------------ <br/>获取登录接口返回的响应体数据:{&#x27;status&#x27;: 100, &#x27;description&#x27;: &#x27;用户不存在&#x27;}
<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test01_reg_login.py::TestRegLogin::test04_user_login[18743264321--100-密码不能为空]</td>
          <td class="col-duration">0.09</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> ------------------------------Captured stdout call------------------------------ <br/>获取登录接口返回的响应体数据:{&#x27;status&#x27;: 100, &#x27;description&#x27;: &#x27;密码不能为空&#x27;}
<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test02_open_account.py::TestOpenAccount::test01_realname</td>
          <td class="col-duration">0.20</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> ------------------------------Captured stdout call------------------------------ <br/>获取登录接口返回的响应体数据:{&#x27;status&#x27;: 200, &#x27;description&#x27;: &#x27;登录成功&#x27;}
获取实名认证接口返回的响应数据体数据：{&#x27;status&#x27;: 200, &#x27;data&#x27;: {&#x27;card_id&#x27;: &#x27;450****798&#x27;, &#x27;realname&#x27;: &#x27;张**&#x27;}, &#x27;description&#x27;: &#x27;提交成功!&#x27;}
<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test02_open_account.py::TestOpenAccount::test02_open_account</td>
          <td class="col-duration">0.20</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> ------------------------------Captured stdout call------------------------------ <br/>获取登录接口返回的响应体数据:{&#x27;status&#x27;: 200, &#x27;description&#x27;: &#x27;登录成功&#x27;}
获取开户接口返回的响应数据：&lt;Response [200]&gt;
<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test02_open_account.py::TestOpenAccount::test03_third_open_account</td>
          <td class="col-duration">0.48</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> ------------------------------Captured stdout call------------------------------ <br/>获取登录接口返回的响应体数据:{&#x27;status&#x27;: 200, &#x27;description&#x27;: &#x27;登录成功&#x27;}
获取开户接口返回的响应数据：&lt;Response [200]&gt;
获取的第三方接口请求数据的url：http://121.43.169.97:8000/muser/publicRequests
获取的第三方接口请求数据的请求体数据：{&#x27;Version&#x27;: &#x27;10&#x27;, &#x27;CmdId&#x27;: &#x27;UserRegister&#x27;, &#x27;MerCustId&#x27;: &#x27;6000060007313892&#x27;, &#x27;BgRetUrl&#x27;: &#x27;https://www.baidu.com/&#x27;, &#x27;RetUrl&#x27;: &#x27;http://user-p2p-test.itheima.net/trust/chinapnr/register/return/22111217451151028003&#x27;, &#x27;UsrId&#x27;: &#x27;&#x27;, &#x27;UsrName&#x27;: &#x27;&#x27;, &#x27;IdType&#x27;: &#x27;00&#x27;, &#x27;IdNo&#x27;: &#x27;450102199003078798&#x27;, &#x27;UsrMp&#x27;: &#x27;18743264321&#x27;, &#x27;UsrEmail&#x27;: &#x27;&#x27;, &#x27;MerPriv&#x27;: &#x27;22111217451151028003&#x27;, &#x27;ChkValue&#x27;: &#x27;-101&#x27;, &#x27;CharSet&#x27;: &#x27;UTF-8&#x27;}
获取开户接口返回的响应数据：&lt;Response [200]&gt;
<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test03_recharge.py::TestRecharge::test01_get_recharge_verify_code[123-200]</td>
          <td class="col-duration">0.09</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> ------------------------------Captured stdout call------------------------------ <br/>获取充值验证码接口返回的响应数据：&lt;Response [200]&gt;
<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test03_recharge.py::TestRecharge::test01_get_recharge_verify_code[0.113564-200]</td>
          <td class="col-duration">0.10</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> ------------------------------Captured stdout call------------------------------ <br/>获取充值验证码接口返回的响应数据：&lt;Response [200]&gt;
<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test03_recharge.py::TestRecharge::test02_recharge[20000-8888-200-form]</td>
          <td class="col-duration">0.30</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> ------------------------------Captured stdout call------------------------------ <br/>获取登录接口返回的响应体数据:{&#x27;status&#x27;: 200, &#x27;description&#x27;: &#x27;登录成功&#x27;}
获取充值验证码接口返回的响应数据：&lt;Response [200]&gt;
获取充值接口返回的响应数据：&lt;Response [200]&gt;
<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test03_recharge.py::TestRecharge::test02_recharge[20000-6666-100-验证码错误]</td>
          <td class="col-duration">0.40</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> ------------------------------Captured stdout call------------------------------ <br/>获取登录接口返回的响应体数据:{&#x27;status&#x27;: 200, &#x27;description&#x27;: &#x27;登录成功&#x27;}
获取充值验证码接口返回的响应数据：&lt;Response [200]&gt;
获取充值接口返回的响应数据：&lt;Response [200]&gt;
<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test03_recharge.py::TestRecharge::test02_recharge[20000--100-验证码错误]</td>
          <td class="col-duration">0.23</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> ------------------------------Captured stdout call------------------------------ <br/>获取登录接口返回的响应体数据:{&#x27;status&#x27;: 200, &#x27;description&#x27;: &#x27;登录成功&#x27;}
获取充值验证码接口返回的响应数据：&lt;Response [200]&gt;
获取充值接口返回的响应数据：&lt;Response [200]&gt;
<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test03_recharge.py::TestRecharge::test02_recharge[-8888-100-充值金额不能为空]</td>
          <td class="col-duration">0.26</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> ------------------------------Captured stdout call------------------------------ <br/>获取登录接口返回的响应体数据:{&#x27;status&#x27;: 200, &#x27;description&#x27;: &#x27;登录成功&#x27;}
获取充值验证码接口返回的响应数据：&lt;Response [200]&gt;
获取充值接口返回的响应数据：&lt;Response [200]&gt;
<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test03_recharge.py::TestRecharge::test02_recharge[-20000-8888-100-充值金额必须大于0]</td>
          <td class="col-duration">0.25</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> ------------------------------Captured stdout call------------------------------ <br/>获取登录接口返回的响应体数据:{&#x27;status&#x27;: 200, &#x27;description&#x27;: &#x27;登录成功&#x27;}
获取充值验证码接口返回的响应数据：&lt;Response [200]&gt;
获取充值接口返回的响应数据：&lt;Response [200]&gt;
<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test03_recharge.py::TestRecharge::test02_recharge[0-8888-100-充值金额必须大于0]</td>
          <td class="col-duration">0.27</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> ------------------------------Captured stdout call------------------------------ <br/>获取登录接口返回的响应体数据:{&#x27;status&#x27;: 200, &#x27;description&#x27;: &#x27;登录成功&#x27;}
获取充值验证码接口返回的响应数据：&lt;Response [200]&gt;
获取充值接口返回的响应数据：&lt;Response [200]&gt;
<br/></div></td></tr></tbody>
      <tbody class="passed results-table-row">
        <tr>
          <td class="col-result">Passed</td>
          <td class="col-name">scripts/test03_recharge.py::TestRecharge::test03_third_recharge</td>
          <td class="col-duration">0.71</td>
          <td class="col-links"></td></tr>
        <tr>
          <td class="extra" colspan="4">
            <div class="log"> ------------------------------Captured stdout call------------------------------ <br/>获取登录接口返回的响应体数据:{&#x27;status&#x27;: 200, &#x27;description&#x27;: &#x27;登录成功&#x27;}
获取充值验证码接口返回的响应数据：&lt;Response [200]&gt;
获取充值接口返回的响应数据：&lt;Response [200]&gt;
获取的第三方接口请求数据的url：http://121.43.169.97:8000/muser/publicRequests
获取的第三方接口请求数据的请求体数据：{&#x27;Version&#x27;: &#x27;10&#x27;, &#x27;CmdId&#x27;: &#x27;NetSave&#x27;, &#x27;MerCustId&#x27;: &#x27;6000060007313892&#x27;, &#x27;UsrCustId&#x27;: &#x27;6020221112174511&#x27;, &#x27;OrdId&#x27;: &#x27;22111217451398033403&#x27;, &#x27;OrdDate&#x27;: &#x27;20221112&#x27;, &#x27;GateBusiId&#x27;: &#x27;B2C&#x27;, &#x27;OpenBankId&#x27;: &#x27;&#x27;, &#x27;DcFlag&#x27;: &#x27;D&#x27;, &#x27;TransAmt&#x27;: &#x27;100000.00&#x27;, &#x27;RetUrl&#x27;: &#x27;http://user-p2p-test.itheima.net/trust/chinapnr/recharge/return/22111217451398033403&#x27;, &#x27;BgRetUrl&#x27;: &#x27;https://www.baidu.com/&#x27;, &#x27;OpenAcctId&#x27;: &#x27;&#x27;, &#x27;CertId&#x27;: &#x27;&#x27;, &#x27;MerPriv&#x27;: &#x27;54903&#x27;, &#x27;ChkValue&#x27;: &#x27;-101&#x27;, &#x27;CharSet&#x27;: &#x27;UTF-8&#x27;}
获取充值接口返回的响应数据：&lt;Response [200]&gt;
<br/></div></td></tr></tbody></table></body></html>